package main

import (
	"strings"
)

/*
中心对称数指的是一个数字旋转180°之后看上去依旧一样的数字

找出所有长度为n的中心对称数

n = 0的时候，输出nil
n = 1的时候，输出["0", "1", "8"]
n = 2的时候，输出["11", "69", "88", "96"]
n = 3的时候，输出["101", "609", "808", "906",
				 "111", "619", "818", "916",
				 "181", "689", "888", "986"] 此时就是将n = 2中的结果添加到n = 1的结果的两侧
n = 4的时候，输出["1001", "6009", "8008", "9006",
				 "1111", "6119", "8118", "9116",
				 "1691", "6699", "8698", "9696",
				 "1881", "6889", "8888", "9886",
				 "1961", "6969", "8968", "9966"]

*/
func main() {
}

func helper(n int, m int) []string {
	// 第一步：判断输入是否合法
	if n < 0 || m < 0 || n > m {
		panic("非法输入")
	}

	// 第二步：判断递归是否应到结束
	if n == 0 {
		return []string{}
	}
	if n == 1 {
		return []string{"0", "1", "8"}
	}

	// 第三步：缩小问题规模
	list := helper(n-2, m)

	// 第四步：整合结果
	// strings.Join([]string{"0", "0"}, string(s))
	var result []string

	for s := range list {
		if n != m {
			// result = append(result, "0" + string(s) + "0")
			result = append(result, strings.Join([]string{"0", "0"}, string(s)))
		}

		result = append(result, strings.Join([]string{"1", "1"}, string(s)))
		result = append(result, strings.Join([]string{"6", "9"}, string(s)))
		result = append(result, strings.Join([]string{"8", "8"}, string(s)))
		result = append(result, strings.Join([]string{"9", "6"}, string(s)))

	}

	return result
}
